package cn.hznc.utils;

import org.apache.poi.xwpf.usermodel.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author：Administrator
 * @Date：2023/5/10 15:44
 */
public class PoiUtil{

//    /**
//     * 采用poi读取文件
//     *
//     * @param file 文件
//     * @return map
//     */
//    public static synchronized Map<String, String> readDocByPoiOnXcaj(MultipartFile file) {
//        Map<String, String> result;
//        String fileName = file.getOriginalFilename();
//        String prefix = fileName.substring(fileName.lastIndexOf("."));
//        if (".doc".equals(prefix)) {
//            result = importWordToDoc(file);
//        } else if (".docx".equals(prefix)) {
//            result = importWordToDocx(file);
//        } else {
//            throw new IllegalArgumentException("请联系管理员配合检查文档格式!");
//        }
//        return result;
//    }


    /**
     * 关闭输入流
     * @param is
     */
    private static void close(InputStream is) {
        if (is != null) {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }


//    /**
//     * 导入word （doc格式）
//     */
//    public static Map<String,String> importWordToDoc (MultipartFile file) {
//        InputStream inputStream = null;
//        Map<String, String> result = new HashMap<>(30);
//        try {
//            //载入文档
//            inputStream = file.getInputStream();
//            HWPFDocument hwpf = new HWPFDocument(inputStream);
//            //得到文档的读取范围
//            Range range = hwpf.getRange();
//            TableIterator it = new TableIterator(range);
//            int index = 1;
//            String value = "";
//            String key = "";
//            // 迭代文档中的表格
//            while (it.hasNext()) {
//                Table tb = (Table) it.next();
//                for (int i = 0; i < tb.numRows(); i++) {
//                    TableRow tr = tb.getRow(i);
//                    StringBuffer stringBuffer = new StringBuffer();
//                    for (int j = 0; j < tr.numCells(); j++) {
//                        //取得单元格
//                        TableCell td = tr.getCell(j);
//                        //取得单元格的内容
//                        for (int k = 0; k < td.numParagraphs(); k++) {
//                            Paragraph para = td.getParagraph(k);
//                            Optional<String> text1 = Optional.ofNullable(para.text());
//                            String text = text1.orElse("");
//                            text = text.replaceAll("\r", "");
//                            text = text.replaceAll("\r\n", "");
//                            text = text.replaceAll("\\u0007", "");
//                            if (index % 2 != 0) {
//                                key = text;
//                            } else {
//                                value = text;
//                                stringBuffer.append(key).append(":").append(value);
//                                result.put(key, value);
//                            }
//                            index++;
//                        }
//                    }
//                    log.info("打印行" + stringBuffer.toString());
//                }
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            close(inputStream);
//        }
//        return result;
//    }


    /**
     * 导入word （docx格式）
     */
    public static Map<String,String> importWordToDocx (MultipartFile file) {
        InputStream inputStream = null;
        Map<String, String> result = new HashMap<>(30);
        try {
            InputStream inputStream1 = file.getInputStream();
            XWPFDocument xdoc = new XWPFDocument(inputStream1);
            List<XWPFParagraph> paras = xdoc.getParagraphs();
            for (XWPFParagraph para : paras) {
                //当前段落的属性
                //CTPPr pr = para.getCTP().getPPr();
                System.out.println(para.getText());
            }
            //获取文档中所有的表格
            List<XWPFTable> tables = xdoc.getTables();
            List<XWPFTableRow> rows;
            List<XWPFTableCell> cells;
            int index = 1;
            String value = "";
            String key = "";
            for (XWPFTable table : tables) {
                //表格属性
                //       CTTblPr pr = table.getCTTbl().getTblPr();
                //获取表格对应的行
                rows = table.getRows();
                for (XWPFTableRow row : rows) {
                    //获取行对应的单元格
                    cells = row.getTableCells();
                    for (XWPFTableCell cell : cells) {
                        System.out.println(cell.getText());
                        String text = cell.getText();
                        text = text.replaceAll("\r", "");
                        text = text.replaceAll("\r\n", "");
                        text = text.replaceAll("\\u0007", "");
                        if (index % 2 != 0) {
                            key = text;
                        } else {
                            StringBuffer stringBuffer = new StringBuffer();
                            value = text;
                            stringBuffer.append(key).append(":").append(value);
                            result.put(key, value);
                        }
                        index++;
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(inputStream);
        }
        return result;
    }
}
